/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package words2;

/**
 *
 * @author Oriol
 */

import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
import javax.swing.JOptionPane;
import java.io.*;



public class FileControllerD extends JFrame {

     private JFileChooser _fc;

        public FileControllerD() {
            setLayout(null);

        }


		/**
		*
		*
		* Obre el fitxer especificat mitjanÃ§ant un FileChooser i el posa al textArea passat com a parÃ metre
		*
		* @author oriol.cano
		* @param JTextArea ta: Area de text on volem que s'obri el ficher.
		* @return -
		* @throws -
		*/
        public void openFile(JTextArea ta) {
			try {

                     BufferedReader input = getFileR();
                     StringBuilder buffer = new StringBuilder();
                     String t;
                     ta.setText("");
                     while((t = input.readLine()) != null) {
                         buffer.append(t).append("\n");
                     }
                     ta.append(buffer.toString());



           }catch(IOException ioException) {
                JOptionPane.showMessageDialog(this,"Error canal: "+ ioException);
           }
		}

		/**
		*
		*
		* Retorna el fitxer de text seleccionat mitjanÃ§ant un JFileChooser
		*
		* @author oriol.cano
		* @param -
		* @return BufferedReader amb el contingut del fitxer de text.
		* @throws -
		*/
		public BufferedReader getFileR() {
            FileControllerDomain fCD = new FileControllerDomain();
            _fc = fCD.openFile();
            /*
             * LA FUNCIO DE SOBR S'HAURIA D'INVOCAR AL CONTROLADOR DE DOMINI
                PROPI DE CADA SUBGRUP, HE POSAT EL DE PRESENTACIO PER COMODITAT
             */
            File fitxer = _fc.getSelectedFile();

             if((fitxer == null) || (fitxer.getName().equals(""))) {
                JOptionPane.showMessageDialog(this,"Error","Error",JOptionPane.ERROR_MESSAGE);
                return null;
             }
			if(fitxer.isFile() && fitxer.canRead()) {

				BufferedReader _buf = null;
				try {
					_buf = new BufferedReader(new FileReader(fitxer));
				} catch (FileNotFoundException ex) {
					//Logger.getLogger(FileControllerD.class.getName()).log(Level.SEVERE, null, ex);
				}
					return _buf;
				}
			return null;
		}

		/**
		*
		*
		* Retorna un buffer de lectura del fitxer de text indicat per una ruta.
		*
		* @author oriol.cano
		* @param String path: Indica la ruta del fitxer de text.
		* @return BufferedReader amb el contingut del fitxer de text.
		* @throws -
		*/
		public BufferedReader getFileR(String path) {
			File _file = new File(path);
			BufferedReader _buf = null;
			try {
				_buf = new BufferedReader(new FileReader(_file));
			} catch (Exception ex) {
				Logger.getLogger(FileControllerD.class.getName()).log(Level.SEVERE, null, ex);
			}
			return _buf;
		}

		/**
		*
		*
		* Retorna un buffer d'escriptura del fitxer de text seleccionat mitjanÃ§ant un JFileChooser.
		*
		* @author oriol.cano
		* @param -
		* @return BufferedWriter des d'on es pot afegir contingut al fitxer de text.
		* @throws -
		*/
	   public BufferedWriter getFileW() {
            FileControllerDomain fCD = new FileControllerDomain();
            _fc = fCD.openFile();
            /*
             * LA FUNCIO DE SOBRE S'HAURIA D'INVOCAR AL CONTROLADOR DE DOMINI
                PROPI DE CADA SUBGRUP, HE POSAT EL DE PRESENTACIO PER COMODITAT
             */
            File fitxer = _fc.getSelectedFile();

             if((fitxer == null) || (fitxer.getName().equals(""))) {
                JOptionPane.showMessageDialog(this,"Error","Error",JOptionPane.ERROR_MESSAGE);
                return null;
             }
			if(fitxer.isFile()) {
				BufferedWriter _buf = null;
				try {
					_buf = new BufferedWriter(new FileWriter(fitxer, true));
				} catch (Exception ex) {
					//Logger.getLogger(FileControllerD.class.getName()).log(Level.SEVERE, null, ex);
				}
					return _buf;
				}
			return null;
    }

	   /**
		*
		*
		* Retorna un buffer d'escriptura del fitxer de text indicat per una ruta.
		*
		* @author oriol.cano
		* @param String path: Indica la ruta del fitxer de text.
		* @return BufferedWriter amb el contingut del fitxer de text.
		* @throws -
		*/
    public BufferedWriter getFileW(String path) {
        File _file = new File(path);
		BufferedWriter _buf = null;
		try {
			_buf = new BufferedWriter(new FileWriter(_file,true));
		} catch (Exception ex) {
			//Logger.getLogger(FileControllerD.class.getName()).log(Level.SEVERE, null, ex);
		}
		return _buf;


    }
		/**
		*
		*
		* Guarda en un fitxer de text seleccionat mitjanÃ§ant un JFileChooser
		* el contingut d'un JtextArea
		*
		* @author oriol.cano
		* @param JTextArea ta: JTextArea del que s'ha de guardar el contingut en un fitxer de text.
		* @return -
		* @throws -
		*/
    public void saveFile(JTextArea ta) {
        FileControllerP fCP = new FileControllerP();
        _fc = fCP.chooseFile();
        File name = _fc.getSelectedFile();

        if(!name.exists()) {
            try {
                PrintWriter output = new PrintWriter(new FileWriter(name + ".txt",true));
                output.write(ta.getText());
                output.close();
            }
            catch (IOException ioException){
              JOptionPane.showMessageDialog(null, "Error en el archivo","Error",JOptionPane.ERROR_MESSAGE);
            }
        }
        else {
            int n = JOptionPane.showConfirmDialog(this,"El archivo ya existe desea reemplazarlo?");
            if (n == JOptionPane.YES_OPTION) {
                try {
                    PrintWriter output = new PrintWriter(new FileWriter(name));
                    output.write(ta.getText());
                    output.close();
                }
                catch (IOException ioException){
                    JOptionPane.showMessageDialog(null, "Error en el archivo","Error",JOptionPane.ERROR_MESSAGE);
                }
            }
        }
    }
}